//消息存储子模块的odb映射代码

#pragma once
#include <string>
#include <cstddef> 
#include <odb/nullable.hxx>
#include <odb/core.hxx>
#include <boost/date_time/posix_time/posix_time.hpp>

namespace zrb 
{
    #pragma db object table("message")
    class Message
    {
    public:
        Message()
        {}
        
        Message(const std::string& message_id,
            const std::string& session_id,
            const std::string& user_id,
            unsigned char message_type,
            const boost::posix_time::ptime& create_time)
            :_message_id(message_id)
            ,_user_id(user_id)
            ,_session_id(session_id)
            ,_message_type(message_type)
            ,_create_time(create_time)
        {}

        std::string message_id()
        {
            return _message_id;
        }
        void message_id(const std::string& val)
        {
            _message_id = val;
        }

        std::string user_id()
        {
            return _user_id;
        }
        void user_id(const std::string& val)
        {
            _user_id = val;
        }

        std::string session_id()
        {
            return _session_id;
        }
        void session_id(const std::string& val)
        {
            _session_id = val;
        }

        unsigned char message_type()
        {
            return _message_type;
        }
        void message_type(unsigned char val)
        {
            _message_type = val;
        }

        boost::posix_time::ptime create_time()
        {
            return _create_time;
        }
        void create_time(boost::posix_time::ptime val)
        {
            _create_time = val;
        }

        std::string content()
        {
            if(!_content)
                return std::string();
            return *_content;
        }
        void content(const std::string& val)
        {
            _content = val;
        }

        std::string file_id()
        {
            if(!_file_id)
                return std::string();
            return *_file_id;
        }
        void file_id(const std::string& val)
        {
            _file_id = val;
        }

        std::string file_name()
        {
            if(!_file_name)
                return std::string();
            return *_file_name;
        }
        void file_name(const std::string& val)
        {
            _file_name = val;
        }

        unsigned int file_size()
        {
            if(!_file_size)
                return 0;
            return *_file_size;
        }
        void file_size(unsigned int val)
        {
            _file_size = val;
        }

    private:
        friend class odb::access;
        #pragma db id auto //主键自增
        unsigned long _id;
        #pragma db type("varchar(64)") index unique  //为消息id建立索引，并且是唯一，便于查询  
        std::string _message_id;                     //消息ID
        #pragma db type("varchar(64)")
        std::string _user_id;                        //发送者用户ID
        #pragma db type("varchar(64)") index
        std::string _session_id;                     //所属会话ID
        unsigned char _message_type;                  //消息类型
        #pragma db type("TIMESTAMP")
        boost::posix_time::ptime _create_time;       //消息的产生时间
        odb::nullable<std::string> _content;         //文本消息内容 --- 非文本消息内容可以忽略

        #pragma db type("varchar(64)")
        odb::nullable<std::string> _file_id;         //文件消息ID --- 文本消息内容可以忽略
        #pragma db type("varchar(128)")
        odb::nullable<std::string> _file_name;       //文件消息的文件名称 --- 文本消息内容可以忽略
        odb::nullable<unsigned int> _file_size;      //文件消息的大小 --- 文本消息内容可以忽略
    };
}

// odb -d mysql --generate-query --generate-schema --profile boost/date-time message.hxx